
// Copyright (c) 2018 brinkqiang (brink.qiang@gmail.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

#include "luafmt.h"
#include "dmformat.h"
#include "dmlog.h"

Cluafmt::Cluafmt(sol::this_state L)
: m_oState(L)
{
    DMLOG_INIT();
}

void Cluafmt::log(sol::this_state L, spdlog::level::level_enum lvl, const std::string& fmt, sol::variadic_args v)
{
    switch (lvl)
    {
    case spdlog::level::trace:
        trace(L, fmt, v);
        break;
    case spdlog::level::debug:
        debug(L, fmt, v);
        break;
    case spdlog::level::info:
        info(L, fmt, v);
        break;
    case spdlog::level::warn:
        warn(L, fmt, v);
        break;
    case spdlog::level::err:
        error(L, fmt, v);
        break;
    case spdlog::level::critical:
        critical(L, fmt, v);
        break;
    case spdlog::level::off:
        off(L, fmt, v);
        break;
    default:
        break;
    }
}

void Cluafmt::trace(sol::this_state L, const std::string& fmt, sol::variadic_args v)
{
   CDMLog::Instance()->GetLogger()->trace(format(L, fmt, v));
}

void Cluafmt::debug(sol::this_state L, const std::string& fmt, sol::variadic_args v)
{
   CDMLog::Instance()->GetLogger()->debug(format(L, fmt, v));
}

void Cluafmt::info(sol::this_state L, const std::string& fmt, sol::variadic_args v)
{
   CDMLog::Instance()->GetLogger()->info(format(L, fmt, v));
}

void Cluafmt::warn(sol::this_state L, const std::string& fmt, sol::variadic_args v)
{
   CDMLog::Instance()->GetLogger()->warn(format(L, fmt, v));
}

void Cluafmt::error(sol::this_state L, const std::string& fmt, sol::variadic_args v)
{
   CDMLog::Instance()->GetLogger()->error(format(L, fmt, v));
}

void Cluafmt::critical(sol::this_state L, const std::string& fmt, sol::variadic_args v)
{
   CDMLog::Instance()->GetLogger()->critical(format(L, fmt, v));
}

void Cluafmt::off(sol::this_state L, const std::string& fmt, sol::variadic_args v)
{

}

std::string Cluafmt::format(sol::this_state L, const std::string& fmt, sol::variadic_args v)
{
    //fmt::dynamic_format_arg_store<fmt::format_context> store;

    switch (v.size())
    {
    case 0:
        return std::move(fmt::format(fmt));
        break;
    case 1:
        return std::move(fmt::format(fmt, v[0].get<std::string>()));
        break;
    case 2:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>()));
        break;
    case 3:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>()));
        break;
    case 4:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>()));
        break;
    case 5:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>()));
        break;
    case 6:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>()));
        break;
    case 7:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>()));
        break;
    case 8:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>()));
        break;
    case 9:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>()));
        break;
    case 10:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>()));
        break;
    case 11:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>()));
        break;
    case 12:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>()));
        break;
    case 13:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>()));
        break;
    case 14:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>()));
        break;
    case 15:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>()));
        break;
    case 16:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>()));
        break;
    case 17:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>()));
        break;
    case 18:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>()));
        break;
    case 19:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>()));
        break;
    case 20:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>()));
        break;
    case 21:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>()));
        break;
    case 22:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>()));
        break;
    case 23:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>()));
        break;
    case 24:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>()));
        break;
    case 25:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>()));
        break;
    case 26:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>()));
        break;
    case 27:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>()));
        break;
    case 28:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>()));
        break;
    case 29:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>()));
        break;
    case 30:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>()));
        break;
    case 31:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>()));
        break;
    case 32:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>()));
        break;
    case 33:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>()));
        break;
    case 34:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>()));
        break;
    case 35:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>()));
        break;
    case 36:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>()));
        break;
    case 37:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>()));
        break;
    case 38:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>()));
        break;
    case 39:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>()));
        break;
    case 40:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>()));
        break;
    case 41:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>()));
        break;
    case 42:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>()));
        break;
    case 43:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>()));
        break;
    case 44:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>()));
        break;
    case 45:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>()));
        break;
    case 46:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>()));
        break;
    case 47:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>()));
        break;
    case 48:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>()));
        break;
    case 49:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>()));
        break;
    case 50:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>()));
        break;
    case 51:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>()));
        break;
    case 52:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>()));
        break;
    case 53:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>()));
        break;
    case 54:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>()));
        break;
    case 55:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>()));
        break;
    case 56:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>()));
        break;
    case 57:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>(), v[56].get<std::string>()));
        break;
    case 58:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>(), v[56].get<std::string>(), v[57].get<std::string>()));
        break;
    case 59:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>(), v[56].get<std::string>(), v[57].get<std::string>(), v[58].get<std::string>()));
        break;
    case 60:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>(), v[56].get<std::string>(), v[57].get<std::string>(), v[58].get<std::string>(), v[59].get<std::string>()));
        break;
    case 61:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>(), v[56].get<std::string>(), v[57].get<std::string>(), v[58].get<std::string>(), v[59].get<std::string>(), v[60].get<std::string>()));
        break;
    case 62:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>(), v[56].get<std::string>(), v[57].get<std::string>(), v[58].get<std::string>(), v[59].get<std::string>(), v[60].get<std::string>(), v[61].get<std::string>()));
        break;
    case 63:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>(), v[56].get<std::string>(), v[57].get<std::string>(), v[58].get<std::string>(), v[59].get<std::string>(), v[60].get<std::string>(), v[61].get<std::string>(), v[62].get<std::string>()));
        break;
    case 64:
        return std::move(fmt::format(fmt, v[0].get<std::string>(), v[1].get<std::string>(), v[2].get<std::string>(), v[3].get<std::string>(), v[4].get<std::string>(), v[5].get<std::string>(), v[6].get<std::string>(), v[7].get<std::string>(), v[8].get<std::string>(), v[9].get<std::string>(), v[10].get<std::string>(), v[11].get<std::string>(), v[12].get<std::string>(), v[13].get<std::string>(), v[14].get<std::string>(), v[15].get<std::string>(), v[16].get<std::string>(), v[17].get<std::string>(), v[18].get<std::string>(), v[19].get<std::string>(), v[20].get<std::string>(), v[21].get<std::string>(), v[22].get<std::string>(), v[23].get<std::string>(), v[24].get<std::string>(), v[25].get<std::string>(), v[26].get<std::string>(), v[27].get<std::string>(), v[28].get<std::string>(), v[29].get<std::string>(), v[30].get<std::string>(), v[31].get<std::string>(), v[32].get<std::string>(), v[33].get<std::string>(), v[34].get<std::string>(), v[35].get<std::string>(), v[36].get<std::string>(), v[37].get<std::string>(), v[38].get<std::string>(), v[39].get<std::string>(), v[40].get<std::string>(), v[41].get<std::string>(), v[42].get<std::string>(), v[43].get<std::string>(), v[44].get<std::string>(), v[45].get<std::string>(), v[46].get<std::string>(), v[47].get<std::string>(), v[48].get<std::string>(), v[49].get<std::string>(), v[50].get<std::string>(), v[51].get<std::string>(), v[52].get<std::string>(), v[53].get<std::string>(), v[54].get<std::string>(), v[55].get<std::string>(), v[56].get<std::string>(), v[57].get<std::string>(), v[58].get<std::string>(), v[59].get<std::string>(), v[60].get<std::string>(), v[61].get<std::string>(), v[62].get<std::string>(), v[63].get<std::string>()));
        break;
    default:
        break;
    }

    return std::move(fmt::format(fmt));
}
